Перейти к содержанию
Fire Monkey от А до Я
  • 0

AngryOwl

Вопрос

Есть компонент TTaskBar, отвечающий за работу приложения со своим элементом приложения на Панели Задач. Он позволяет отображать "состояние" приложения и т.д.

Но вся загвоздка в том, что этот элемент работает только с VCL. Что касается FMX, конкретно под Windows, то таковой реализации нет, и не удается использовать этот компонент "ручками".

Короче. Проблема в том, чтобы отображать в "панели задач" состояние FMX приложения.

Может кто-то подскажет, в особенности наши уважаемые гуру, - что делать и как быть?

Ссылка на комментарий

Рекомендуемые сообщения

  • 0
6 часов назад, AlexG сказал:

Есть компонент TTaskBar, отвечающий за работу приложения со своим элементом приложения на Панели Задач. Он позволяет отображать "состояние" приложения и т.д.

Но вся загвоздка в том, что этот элемент работает только с VCL. Что касается FMX, конкретно под Windows, то таковой реализации нет, и не удается использовать этот компонент "ручками".

Короче. Проблема в том, чтобы отображать в "панели задач" состояние FMX приложения.

Может кто-то подскажет, в особенности наши уважаемые гуру, - что делать и как быть?

Самое очевидное, посмотреть как реализован TTaskBar и сделать аналог для FMX, или сильно урезанный аналог с необходимым вам функционалом.

Ссылка на комментарий
  • 0

Самое простое решение ("на коленке"):

uses
  ...
  {$IFDEF MSWINDOWS}
  System.Win.ComObj,
  Winapi.ShlObj,
  {$ENDIF}
  ...
//-------------------------------------------------
type
  TTaskBarState = record
    name : string;
    value : byte;
  end;

  TFMXTaskBar = class(TPersistent)
  private
    fTaskBarList : ITaskBarList3;
    fTaskBarState : integer;
    fTaskBarProgress : integer;
    fAlertState : Boolean;
    procedure setTaskBarState(newState:integer);
    procedure setTaskBarProgress(newValue : integer);
    procedure setAlertState(const Value: Boolean);
  protected
  public
    property AlertState: Boolean read fAlertState write setAlertState;
    property TaskBarState : integer read fTaskBarState write setTaskBarState;
    property TaskBarProgress : integer read fTaskBarProgress write setTaskBarProgress;
    constructor Create;
    destructor Destroy; override;
  end;
//-------------------------------------------------

const
  taskStates : array [0..4] of TTaskBarState = (
            (name: 'TBPF_NOPROGRESS';    value: TBPF_NOPROGRESS),
            (name: 'TBPF_INDETERMINATE'; value: TBPF_INDETERMINATE),
            (name: 'TBPF_NORMAL';        value: TBPF_NORMAL),
            (name: 'TBPF_ERROR';         value: TBPF_ERROR),
            (name: 'TBPF_PAUSED';        value: TBPF_PAUSED));
//-------------------------------------------------
var
  MainTaskBar: TFMXTaskBar;
//-------------------------------------------------

{ TFMXTaskBar }

constructor TFMXTaskBar.Create;
var
  tbList : ITaskBarList;
  hr : HRESULT;
begin
  tbList := CreateComObject(CLSID_TaskBarList) as ITaskBarList;
  hr := tbList.QueryInterface(IID_ITaskBarList3, fTaskBarList);
  if hr <> S_OK then
  begin
    fTaskBarList := nil;
    tbList._Release;
  end;
end;

destructor TFMXTaskBar.Destroy;
begin

  inherited;
end;

procedure TFMXTaskBar.setAlertState(const Value: Boolean);
begin
  if assigned(fTaskBarList) then
    if fAlertState <> Value then
    begin
      fAlertState := Value;

      if Value then
      begin
        setTaskBarState(3);       // TBPF_ERROR
        setTaskBarProgress(100);
      end else
      begin
        setTaskBarState(0);
        setTaskBarProgress(0);
      end;
    end;
end;

procedure TFMXTaskBar.setTaskBarProgress(newValue: integer);
begin
  if assigned(fTaskBarList) then
    fTaskBarList.SetProgressValue(ApplicationHWND, newValue, 100);
end;

procedure TFMXTaskBar.setTaskBarState(newState: integer);
begin
  if assigned(fTaskBarList) then
    fTaskBarList.SetProgressState(ApplicationHWND, taskStates[newState].value);
end;
//-------------------------------------------------

initialization
  MainTaskBar := TFMXTaskBar.Create;

finalization
  if Assigned(MainTaskBar) then
    FreeAndNil(MainTaskBar);

 

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...